package com.thiswhyme.ratelimiter.annotation;

import java.lang.annotation.*;

/**
 * @description: 限流注解
 * @author: thiswhyme
 * @date: 2021/8/30
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {

    /**
     * 限流器的一级key（可用于定义为被保护的资源）
     * @return String
     */
    String key();

    /**
     * 限流器的二级key（可用于定义热点参数，支持#param格式读取方法参数）
     * @return String
     */
    String subKey() default "";

    /**
     * 单位时间（毫秒）
     * @return long
     */
    long rateIntervalMillis() default 1000;

    /**
     * 单位时间访问数
     * @return long
     */
    long rate();

    /**
     * 单位时间访问数（支持动态配置，有值时会覆盖rate）
     * @return String
     */
    String dynamicRate() default "";

    /**
     * 占permits的速度计算值，默认1
     * @return long
     */
    long permits() default 1;

    /**
     * 等待时间（毫秒），默认不等待
     * @return long
     */
    long waitTimeoutMillis() default 0;

    /**
     * 降级函数，需要与源方法在同一类中且参数相同
     * @return
     */
    String fallback() default "";
}
